﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EasyElasticLogger.NETFramework.ES.Models
{
    /// <summary>
    /// 表示一条写入 Elasticsearch 的日志记录。
    /// 字段设计遵循通用日志规范，便于 Kibana 查询和分析。
    /// </summary>
    public class ElasticLogEntry
    {
        /// <summary>
        /// 日志时间戳（UTC 时间）。
        /// 默认为当前 UTC 时间，确保时区一致性。
        /// </summary>
        public DateTime Timestamp { get; set; } = DateTime.UtcNow;

        /// <summary>
        /// 日志级别，如 INFO、WARN、ERROR。
        /// 建议使用大写，便于聚合分析。
        /// </summary>
        public string Level { get; set; }

        /// <summary>
        /// 日志消息正文。
        /// </summary>
        public string Message { get; set; }

        /// <summary>
        /// 日志详细数据（可选）
        /// 主要在 Level 为 INFO 时填充
        /// </summary>
        public object Data { get; set; }

        /// <summary>
        /// 异常堆栈信息（可选）。
        /// 仅在 Level 为 ERROR 时填充。
        /// </summary>
        public string Exception { get; set; }

        /// <summary>
        /// 日志来源（通常是类名或模块名）。
        /// 用于快速定位问题模块。
        /// </summary>
        public string Source { get; set; }

        /// <summary>
        /// 机器名称
        /// </summary>
        public string MachineName { get; set; }

        /// <summary>
        /// 应用程序名称
        /// </summary>
        public string ApplicationName { get; set; }

        /// <summary>
        /// 线程ID
        /// </summary>
        public string ThreadId { get; set; }
    }
}